/*
    KMC Simulation
    Copyright (c) 2012 Filip Rozbořil

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "includes.h"
#include "Grid.h"

typedef unordered_map<GridAtom*, int32_t>::iterator AtomMapIt;

class ClusterCollection
{
  	private:
  		vector<vector<GridAtom*>*> mClusters;
  		unordered_map<GridAtom*, int32_t> mAtomClusters;
  		int32_t getAtomCluster(GridAtom* atom)
  		{
  		 	AtomMapIt it = mAtomClusters.find(atom); return it != mAtomClusters.end() ? it->second : -1;
  		}
  		void assignCluster(GridAtom* atom, int32_t& currentCluster, vector<GridAtom*>& neighbors);
  		
  	public:
  		ClusterCollection(Grid& g);
  		~ClusterCollection()
  		{
  		 	for(vector<vector<GridAtom*>*>::size_type i = 0; i < mClusters.size(); i++)
  		 	{
  		 	 	delete mClusters[i];
  		 	}
  		}
  		vector<uint32_t> getClusters();  		
};
